//#include<iostream>
//using namespace std;
//
//
//int main()
//{
//	for (int year = 2000; year <= 2022 ; year++)
//    for(int month = 1 ; month <= 12 ; month++)
//		for (int day = 1; day <= 31; day++)
//		{
//			if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)
//				;
//			else if (month == 2)
//			{
//				if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
//				{
//					if (day > 29) break;
//				}
//				else
//				{
//					if (day > 28) break;
//				}
//			}
//			else
//			{
//				if (day > 30) break;
//			}
//		}
//	
//	return 0;
//}

//#include<iostream>
//using namespace std;
//const int N = 1e4 + 10;
//int a[N];  int b[N];  int ret; int n;
//void check(int x)
//{
//	a[1] = x; 
//	for (int i = 2; i <= n+1; i++)
//	{
//		a[i] = b[i - 1] - a[i - 1] - a[i - 2];
//		if (a[i] > 1 || a[i] < 0) return;
//	}
//	if (a[n + 1] == 0) ret++;
//}
//int main()
//{
//     cin >> n;
//	for (int i = 1; i <= n; i++)
//	{
//		cin >> b[i];
//	}
//	check(1);
//	check(0);
//
//	cout << ret;
//	return 0;
//}


//#include<iostream>
//using namespace std;
//const int N = 2e5+10;
//long long a[N]; 
//int main()
//{
//	long long minn = 0; long long maxx = -1e20;
//	int n; cin >> n;
//	for (int i = 1; i <= n; i++)
//	{
//		int x; cin >> x;
//		a[i] = a[i - 1] + x;
//		maxx = max(maxx , a[i]-minn);
//		minn = min(minn,a[i]);
//	}
//
//
//	cout << maxx << endl;
//	return 0;
//}


//#include<iostream>
//using namespace std;
//const int N = 1e3 + 10;
//long long f[N][N], a[N][N];
//int main()
//{
//    int n, m, q;
//    cin >> n >> m >> q;
//    for (int i = 1; i <= n; i++)
//    {
//        for (int j = 1; j <= m; j++)
//        {
//            cin >> a[i][j];
//        }
//    }
//    for (int i = 1; i <= n; i++)
//    {
//        for (int j = 1; j <= m; j++)
//        {
//            f[i][j] = f[i - 1][j] + f[i][j - 1] + a[i][j] - f[i - 1][j - 1];
//        }
//    }
//    while (q--)
//    {
//        int x1, y1, x2, y2;
//        cin >> x1 >> y1 >> x2 >> y2;
//        cout << f[x2][y2] - f[x2 - x1][y2] - f[x2][y2 - y1] + f[x2 - x1][y2 - y1] << endl;
//    }
//
//    return 0;
//}
//#include<iostream>
//#include<string>
//using namespace std;
//int main()
//{
//	string s;
//	getline(cin ,s);
//	cout << s << endl;
//	return 0;
//}


#include<iostream>
#include<deque>
#include<cstring>
using namespace std;
const int N = 510;
int dx[4] = { 0,0,1,-1 };
int dy[4] = { 1,-1,0,0 };
char a[N][N]; int dist[N][N];
int n, m;
int curx1; int cury1;
int x2, y2;
//void bfs()
//{
//    if (x1 == x2 && y1 == y2)
//    {
//        dist[x2][y2] = 0;
//        return;
//    }
//    deque<pair<int, int>> q;
//    memset(dist, -1, sizeof dist);
//    q.push_back({ x1,y1 });  dist[x1][y1] = 0;
//    while (q.size())
//    {
//        int xx = q.front().first;  int yy = q.front().second; q.pop_front();
//        if (xx == x2 && yy == y2) return;
//        for (int i = 0; i < 4; i++)
//        {
//            int nx = xx + dx[i];  int ny = yy + dy[i];
//            if (nx >= 1 && nx <= n && ny >= 1 && ny <= m)
//            {
//                int w = (a[xx][yy] == a[nx][ny] ? 0 : 1);
//                if (dist[nx][ny] == -1)
//                {
//                    dist[nx][ny] = dist[xx][yy] + w;
//
//                    if (w == 0)
//                    {
//                        q.push_front({ nx,ny });
//                    }
//                    else
//                    {
//                        q.push_back({ nx,ny });
//                    }
//                }
//                else if (dist[xx][yy] + w < dist[nx][ny])
//                {
//                    dist[nx][ny] = dist[xx][yy] + w;
//
//                }
//            }
//        }
//    }
//}
int main()
{
    while (1)
    {
        cin >> n >> m;
        if (n == 0 && m == 0)break;
        for (int i = 0; i < n; i++)
            for (int j = 0; j < m; j++)
                cin >> a[i][j];

       // cin >> x1 >> y1 >> x2 >> y2;
        //bfs();
        cout << dist[x2][y2] << endl;
    }
    return 0;
}